extends Node2D
@onready var menu_form = $UILayer/MenuForm
@onready var state_chart = $StateChart

var _levels : Array[PackedScene] = [
	preload("res://source/scene/level.tscn"),
	preload("res://source/scene/levels/level_01.tscn"),
	preload("res://source/scene/levels/level_02.tscn"),
	preload("res://source/scene/levels/level_03.tscn")
]
var current_scene:
	set(value): #变量的值被更新时获得新值
		if current_scene:
			remove_child(current_scene)
			current_scene.queue_free()
		current_scene = value
		if current_scene:
			add_child(current_scene)


func _on_menu_state_state_entered():
	# 当菜单状态被激活时，执行以下操作
	# 将 menu_form 的 new_game_pressed 信号连接到一个回调函数
	menu_form.new_game_pressed.connect(
		func():
			# 设置状态机的 'level' 元数据为 _levels 数组中的第一个关卡（索引 1）
			state_chart.set_meta("level", _levels[1])
			# 发送事件 'togame'，触发状态机转换到游戏状态
			state_chart.send_event("togame")
			# 隐藏菜单表单
			menu_form.hide()
	)

func _on_game_state_state_entered():
	# 从状态机中获取存储在 'level' 键下的元数据（即当前的场景）
	var level_scene = state_chart.get_meta("level")
	# 实例化获取到的场景，并将其实例化后的对象赋值给 current_scene
	current_scene = level_scene.instantiate()
	# 连接 current_scene 的 rebirth_button_pressed 信号到一个回调函数
	current_scene.restart_button_pressed.connect(
		func():
			GR.life=3#重置体力
			level_scene = _levels[min(current_scene.level_index, _levels.size() - 1)]
			state_chart.set_meta("level", level_scene)
			state_chart.send_event("togame")
	)
	# 连接 current_scene 的 ended 信号到一个回调函数
	current_scene.ended.connect(
		func():
			GR.life=3#重置体力
			# 计算下一个场景的索引，确保不会超出 _levels 数组的范围
			level_scene = _levels[min(current_scene.level_index + 1, _levels.size() - 1)]
			# 更新状态机的 'level' 元数据为新的场景
			state_chart.set_meta("level", level_scene)
			# 发送事件 'togame'，触发状态机转换到游戏状态
			state_chart.send_event("togame")
	)
